package Born.utils
{
	import com.greensock.TweenNano;
	import com.greensock.easing.Elastic;
	
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.utils.getDefinitionByName;

	public class Tooltip extends MovieClip
	{
		private var $newTip						:MovieClip;
		
		public function Tooltip(classClip:String)
		{
			$newTip = new ( getDefinitionByName(classClip) as Class)();
		}
		/**
		 * Basicamente a função <code>Add()</code> vai colocar o tooltip no palco acompanhando o movimento do mouse
		 * ate o momento que a função <code>Remove()</code> for executada. Para o funcionamento a classe setada no
		 * construtor deve ter dois elementos basicos na sua composição, um MovieClip que será o Background
		 * do tooltip e um campo de texto onde será escrito o valor setado na função <code>Add()</code>.<br />
		 * O MovieClip deve ser instanciado de <b>Box</b> e o campo Textfield deve ser instanciado como
		 * <b>Mess</b>, assim tudo irá funcionar como desejado. 
		 * @param message - String : Mensagem que irá aparecer no tooltip
		 * 
		 */		
		public function add(message:String):void
		{
			( $newTip.Mess as TextField ).autoSize = TextFieldAutoSize.CENTER;
			( $newTip.Mess as TextField ).text = String(message);
			( $newTip.Box as MovieClip ).width = ( $newTip.Mess as TextField ).width + 10;
			
			$newTip.alpha = 0;
			$newTip.scaleY = 0.5;
			$newTip.scaleX = 0.5;
			TweenNano.to($newTip, 0.5, { alpha : 1, scaleX : 1, scaleY : 1, ease : Elastic.easeOut });
			addChild($newTip);
			
			this.addEventListener(Event.ENTER_FRAME, loop);
		}
		/**
		 * Função que irá remover o tooltip do palco para que possa ser utilizado em qualquer outro lugar
		 * em qualquer momento que for chamada a função Add() novamente.
		 */		
		public function remove():void
		{
			this.removeEventListener(Event.ENTER_FRAME, loop);
			removeChild($newTip);
		}
		
		private function loop(e:Event):void
		{
			var mX:Number = this.stage.mouseX;
			var mY:Number = this.stage.mouseY;
			
			if ( mX + ( $newTip.width * 0.5 ) > this.stage.stageWidth )
			{
				$newTip.x = this.stage.stageWidth - ( $newTip.width * 0.5 );
				$newTip.y = mY;
			}
			else
			{
				$newTip.x = mX;
				$newTip.y = mY;
			}
		}
		
	} // End Class
	
} // End Package